home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
COMAL
/
Z-Misc Series
/
(k)ze.d64
/
txt.packages
< prev
next >
Wrap
Text File
|
2007-03-01
|
4KB
|
205 lines
┼XTENDING ├╧═┴╠-80
------------------
BY ─ICK ╦LINGENS,
─UTCH ├╧═┴╠ ╒SERS ╟ROUP
├HAPTER 8 IN THE ┼NGLISH/─ANISH
HANDBOOK FOR THE ├╧═┴╠ CARTRIDGE
DESCRIBES A LARGE EXAMPLE FOR A
MODULE WITH ONE PACKAGE.
╚ERE FOLLOWS A SMALL ONE EXTENDING
├╧═┴╠-80 VS 2.01 WITH TWO STRING
ARRAY FUNCTIONS. ┴N EXPLANATION IS
ALSO GIVEN.
┴LL SYMBOLS USED IN A SOURCE FILE
NEED TO BE DEFINED. ╘HIS DEFINITION
IS GIVEN IN THE FIRST LINES IN THE
FILE.
FUNC = 127 ;╞╒╬├
ENDFNC = 126 ;┼╬─╞╒╬├
PARAM = 114
VALUE = PARAM+0
REAL = 0
STR = 2
ARRAY = 6
DEFPAG = %01000110 ;MEMORY MAP
╘HE REGISTER ├╧╨┘1 IS USED BY A
ROUTINE CALLED ╞╬─╨┴╥ WITH WHICH ONE
CAN ╞I╬─ THE LOCATION OF THE
╨┴╥AMETERS OF A PROCEDURE OR FUNCTION
USED IN A ├╧═┴╠ PROGRAM:
COPY1 = $0045
╘HERE ARE A LOT OF ROUTINES THAT CAN
BE USED IN MODULES; THE STARTING
ADDRESS OF THE ROUTINES USED IN THIS
MODULE ARE DEFINED
FNDPAR = $C896
PSHINT = $C9CE
╘HE ROUTINE ╨╙╚╔╬╘ TAKES AN INTEGER
WITH LOW BYTE IN THE REGISTER .╪ AND
HIGH BYTE IN THE REGISTER .┴ AND
PUSHES THE VALUE AS A REAL NUMBER ON
THE ├╧═┴╠ STACK
DUMMY = $CA2F
╘HE ROUTINE ─╒══┘ PERFORMS A ╥╘╙
STATEMENT (RETURN FROM SUBROUTINE).
╘HIS ROUTINE MUST BE CALLED IF THE
SYNTAX OF THE MODULE NEEDS A ROUTINE
WHICH IS NOT FURTHER DESCRIBED.
═ODULES CAN BE PLACED IN DIFFERENT
LOCATIONS IN ╥┴═. ╧NE OF THE
LOCATIONS STARTS AT $8009, SO WE
DEFINE THE START OF THE MODULE BY
* = $8009
╬OW THE MODULE DESCRIPTION IS GIVEN:
.BYT DEFPAG ;╥┴═+╦┼╥╬┴╠+╔/╧
.WOR LEND ;LABEL AT END
.WOR DUMMY ;NO SIGNAL
.BYT 6,'ARFUNC'
╘HIS LINE DEFINES THE PACKAGE NAME:
FIRST THE NUMBER OF CHARACTERS IN THE
NAME, FOLLOWED BY THE NAME BETWEEN
SINGLE QUOTES
.WOR PRTAB ;PACKAGE TABLE
.WOR DUMMY ;NO INITIALISATION
.BYT 0 ;ENDS THE MODULE
╬OW WE BUILD UP THE PACKAGE TABLE; IN
THIS TABLE WE FIND ALL THE PROCEDURE
OR FUNCTION HEADERS IN THE PACKAGE:
PRTAB .BYTE 5,'ARMAX' ;ASCII NAME
╞IRST THE NUMBER OF CHARACTERS IN THE
NAME, FOLLOWED BY THE NAME BETWEEN
SINGLE QUOTES
.WOR HMAX ;HEADER POINTER
.BYT 5,'ARMIN' ;ASCII NAME
.WOR HMIN ;HEADER POINTER
.BYT 0 ;END OF TABLE
╬OW THE PROCEDURE/FUNCTION HEADERS
ARE GIVEN.
HMAX .BYT FUNC+REAL,
.WOR BMAX
.BYT 1
.BYT VALUE+ARRAY+STR,1
.BYT ENDFNC
╘HE FIRST LINE DESCRIBES THE TYPE OF
THE DEFINED STRUCTURE; IN THIS CASE
IT IS A REAL FUNCTION (FUNC+REAL).
BMAX IS A POINTER TO THE DEFINITION
OF THE FUNCTION IN MACHINE LANGUAGE;
THE '1' GIVES THE NUMBER OF
PARAMETERS OF THE FUNCTION.
╔N THE NEXT LINE(S) THE TYPE OF THESE
PARAMETERS ARE DESCRIBED: THE
PARAMETER IS A STRING ARRAY
(ARRAY+STR) CALLED BY VALUE (VALUE+).
╘HE PARAMETER ITSELF HAS ONE
PARAMETER (THE '1' ON THE LINE).
╘HE NEXT PROCEDURE/FUNCTION HEADER IS
HMIN .BYTE FUNC+REAL
.WOR BMIN
.BYT 1
.BYTE VALUE+ARRAY+STR,1
.BYTE ENDFNC
╘HIS FUNCTION HAS THE SAME TYPE AS
THE FIRST. ┬EFORE WE SWITCH TO REAL
MACHINE LANGUAGE, WE WILL DESCRIBE
WITH WHAT KIND OF FUNCTIONS WE WANT
TO EXTEND ├╧═┴╠.
╔F A STRING ARRAY IS DEFINED WITH
─╔═ A$(15:38) ╧╞ 24
╫E WANT TO HAVE AT OUR DISPOSAL THE
VALUES 15 AND 38 AS THE ARRAY INDEX'S
LOWER AND UPPER BOUNDS. ╘HE FUNCTIONS
┴╥═┴╪ AND ┴╥═╔╬ WILL GIVE US THESE
VALUES. ╚ERE WE GO.
╞IRST WE MUST FIND THE ADDRESS WHERE
THE VALUE 38 IS STORED. ╒SING THE
ROUTINE ╞╬─╨┴╥ WE CAN FIND THE
INFORMATION BLOCK OF THE STRING
ARRAY. ╘HE ADDRESS IS RETURNED IN
├╧╨┘1.
╔N (├╧╨┘1)+5 AND (├╧╨┘1)+6 WE FIND
THE UPPER BOUND OF THE INDEX. ╔N
(├╧╨┘1)+3 AND (├╧╨┘1)+4 WE FIND THE
LOWER BOUND.
╘HE STORAGE IS IN HIGH/LOW ORDER.
(├╧╨┘1)+X MEANS ADD X TO THE CONTENTS
OF ├╧╨┘1.
╘HE ROUTINE ╞╬─╨┴╥ NEEDS TO HAVE THE
NUMBER OF THE PARAMETER AT REGISTER
.┴:
BMAX LDA #1 ;FIRST PARAMETER
JSR FNDPAR ;EXEC FNDPAR
LDY #6
LDA (COPY1),Y
TAX
DEY
LDA (COPY1),Y
JSR PSHINT
RTS ;BACK TO ├╧═┴╠
┴ND WE DO THE SAME FOR THE FUNCTION
┴╥═╔╬:
BMIN LDA #1
JSR FNDPAR
LDY #4
LDA (COPY1),Y
TAX
DEY
LDA (COPY1),Y
JSR PSHINT
RTS
LEND .END
╘HE MODULE CAN BE LINKED TO THE
FOLLOWING DEMONSTRATION PROGRAM,
┼╪┴═.┴╥╞╒╬├:
╒╙┼ ARFUNC
─╔═ A$(15:38) ╧╞ 24
╨╥╔╬╘ "INDEX-MIN=",ARMIN(A$())
╨╥╔╬╘ "INDEX-MAX=",ARMAX(A$())
┼╬─ ""
╘HERE IS NO NEED TO ADD A PACKAGE
ROUTINE WHICH TAKES CARE OF POSSIBLE
ERRORS IN THE FUNCTION PARAMETERS,
BECAUSE ├╧═┴╠ HANDLES THESE ERRORS IN
A CORRECT WAY.